home *** CD-ROM | disk | FTP | other *** search
/ Amoszine 8 / Amoszine 8 (Disk 3 of 3).adf / For_RBJones.lha / ASCII_Reader.amos / ASCII_Reader.amosSourceCode next >
Encoding:
AMOS Source Code  |  1992-09-02  |  14.5 KB  |  528 lines

  1. ' *** Hello everyone, Andy Gibson here on the keys ....
  2. ' *** This is a very old ASCII text reader by PJ Hickman and believe 
  3. ' *** it or not, but both MAGNUM and DMC started with this file. 
  4. ' *** So now R Barry Jones can get started on his "HOW-TO" Write a 
  5. ' *** Disk Mag Creator series of articles. 
  6. '  
  7. ' *** That is the main reason for including this source code, but also 
  8. ' *** to let you see where DMC started from.  5 Years old and still not
  9. ' *** too bad a text viewer.  Obvioulsy DMC has hundreds more code than
  10. ' *** this, but this is the skeleton, if you like. :-) 
  11. '
  12. ' *** This code is compatible with Amos Classic V1.3 and Pro V2.0
  13. '
  14. ' *** Well Mr R Barry Jones, now you have all the code you require to
  15. ' *** get things rolling for next issue.  No excuses now m8.  If you need
  16. ' *** any help, just write to myself and I'll see what I can do for you. 
  17. ' *** Send your source and a stamp please so I can see what you are
  18. ' *** stuck on and I promise to reply as always.  Don't go bothering Lee 
  19. ' *** Bamber as he is too busy just now.   
  20. '
  21. ' *** Hope this code helps you m8 - See, Az does listen to what the  
  22. ' *** reader's say and want.   Sorted - Andy Gibson August 1995  :-) 
  23. '
  24. ' *** The code below is in its original form.  Enjoy ....... and let's see 
  25. ' *** if you can come up with a better DMC than mine !!!!!!!   
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32. ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  33. '                             AMOS Ascii Reader  
  34. '
  35. '                              By P.J.Hickman
  36. '
  37. '                        (c) 1990 Mandarin Software  
  38. ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  39. Default 
  40. If Chip Free+Fast Free<100000
  41.    Close Workbench 
  42.    Close Editor 
  43. End If 
  44. If Areg(1)
  45.    F$="AMOS:Help/Acc_Help.Lnk"
  46.    HELP_CALLED=True
  47. Else 
  48.    Screen Close 0
  49.    HELP_CALLED=False
  50. End If 
  51. Get Rom Fonts 
  52. SET_UP_SCREENS
  53. ' -----------------------------------------------------------------------
  54. '              Define global variables for ascii reader bit
  55. ' -----------------------------------------------------------------------
  56. Dim PAGESTART(100),PAGEEND(100)
  57. FILE_PRESENT=False
  58. CURRENT_PAGE=0
  59. PAGE_LENGTH=23
  60. ' -----------------------------------------------------------------------
  61. '                Define global variables for link file bit 
  62. ' -----------------------------------------------------------------------
  63. Dim OPTION$(7,1)
  64. For LOP=0 To 7
  65.    OPTION$(LOP,0)=""
  66.    OPTION$(LOP,1)=""
  67. Next LOP
  68. MENU_TITLE$=Space$(60)
  69. AMOUNT_OF_OPTIONS=0
  70. LINK_FILE_PRESENT=False
  71. LINK_MENU_DISPLAYED=False
  72. LINK_SELECTED=0
  73. ' -----------------------------------------------------------------------
  74. '                       Global variables for alert box 
  75. ' -----------------------------------------------------------------------
  76. Dim LINE$(5),BUTTON$(3)
  77. ' -----------------------------------------------------------------------
  78. Screen 2
  79. If HELP_CALLED
  80.    FILE_LOAD
  81.    F$=""
  82. End If 
  83. Repeat 
  84.    Repeat 
  85.       Screen 1
  86.       POSITION1=Mouse Zone
  87.       Screen 2
  88.       POSITION2=Mouse Zone
  89.       Screen 1
  90.       CLICK=Mouse Click
  91.    Until CLICK
  92.    If POSITION1=1 Then FINISH
  93.    If POSITION1=2 and Not LINK_MENU_DISPLAYED Then CHANGE_RES
  94.    If POSITION1=3 Then FILE_LOAD
  95.    If POSITION1=4 and FILE_PRESENT and Not LINK_MENU_DISPLAYED Then CHOOSE_PRINT
  96.    If POSITION1=5 and FILE_PRESENT and Not LINK_MENU_DISPLAYED Then PAGE_UP
  97.    If POSITION1=6 and FILE_PRESENT and Not LINK_MENU_DISPLAYED Then PAGE_DOWN
  98.    If POSITION1=7 and FILE_PRESENT and LINK_FILE_PRESENT and LINK_MENU_DISPLAYED
  99.       PAGE_SHOW[CURRENT_PAGE]
  100.       LINK_MENU_DISPLAYED=False
  101.       POSITION1=0
  102.    End If 
  103.    If POSITION1=7 and LINK_FILE_PRESENT and Not LINK_MENU_DISPLAYED
  104.       DISPLAY_MENU
  105.       POSITION1=0
  106.    End If 
  107.    If POSITION2>0 and POSITION2=<(AMOUNT_OF_OPTIONS+1) and POSITION2<>LINK_SELECTED and LINK_MENU_DISPLAYED
  108.       LINK_SELECTED=POSITION2
  109.       LINK_LOADER
  110.    End If 
  111. Until False
  112. ' -----------------------------------------------------------------------
  113. '                           Finish the Ascii Reader. 
  114. ' -----------------------------------------------------------------------
  115. Procedure FINISH
  116.  
  117.   End 
  118.  
  119. End Proc
  120. ' -----------------------------------------------------------------------
  121. '    Aaron Fothergill's (slightly altered to work in hires) Alert Box
  122. '       (Uses ZONE's 11+ and returns the button number as a PARAM) 
  123. ' -----------------------------------------------------------------------
  124. Procedure ALERT[W,H,BACK_COL,LINE_COL,NB,NL]
  125.    Shared LINE$(),BUTTON$()
  126.    Screen 2
  127.    TEMP=0
  128.    W=W*8
  129.    H=H*8
  130.    X=(Screen Width/2)-W/2
  131.    Y=10
  132.    Get Block 241,0,Y-2,Screen Width,H+6
  133.    Ink BACK_COL
  134.    Bar X,Y-2 To X+W,Y+H
  135.    Ink LINE_COL
  136.    Box X+1,Y-2 To X+W-1,Y+H-1
  137.    S=W/8/(NB+1)+1
  138.    Paper BACK_COL
  139.    Pen LINE_COL
  140.    For LOP=0 To NL
  141.       Locate 0,Y Text(Y)+1+LOP
  142.       Centre LINE$(LOP)
  143.    Next LOP
  144.    TEMP=0
  145.    While TEMP<>NB
  146.       Locate X Text(X)+S/2+S*TEMP,Y Text(Y+H)-2
  147.       Print Border$(Zone$(BUTTON$(TEMP),TEMP+10),2);
  148.       Inc TEMP
  149.    Wend 
  150.    TEMP=0
  151.    Repeat 
  152.       Repeat : Until Mouse Click and Mouse Key=1
  153.       TEMP=Mouse Zone
  154.    Until TEMP<>0
  155.    Put Block 241,0,Y-2
  156.    Del Block 241
  157.    Add TEMP,-9
  158. End Proc[TEMP]
  159. ' -----------------------------------------------------------------------
  160. Procedure CHOOSE_PRINT
  161.    Shared LINE$(),BUTTON$(),ENOUGH_MEM
  162.    If Fast Free+Chip Free>35000
  163.       ENOUGH_MEM=True
  164.    Else 
  165.       ENOUGH_MEM=False
  166.    End If 
  167.    If ENOUGH_MEM
  168.       LINE$(0)="How much of the file would you like to print?"
  169.       BUTTON$(0)="Just a page"
  170.       BUTTON$(1)="All of it!!"
  171.       BUTTON$(2)="CANCEL"
  172.       ALERT[52,7,0,1,3,1]
  173.       If Param=1
  174.          PAGE_PRINT
  175.       Else 
  176.          If Param=2
  177.             FILE_PRINT
  178.          End If 
  179.       End If 
  180.    Else 
  181.       LINE$(0)="Sorry, you need more memory to do this."
  182.       LINE$(2)="Print this file from Workbench instead."
  183.       BUTTON$(0)="Thanks for the reminder"
  184.       ALERT[44,8,0,1,1,3]
  185.    End If 
  186. End Proc
  187. ' -----------------------------------------------------------------------
  188. Procedure MENU_TITLE_PRINT
  189.    Shared MENU_TITLE$
  190.    Centre At(,1)+MENU_TITLE$
  191.    For LOP=1 To Len(MENU_TITLE$)+2
  192.       TEMP$=TEMP$+"~"
  193.    Next LOP
  194.    Centre At(,2)+TEMP$
  195. End Proc
  196. ' -----------------------------------------------------------------------
  197. Procedure DISPLAY_MENU
  198.    Shared MENU_TITLE$,OPTION$(),AMOUNT_OF_OPTIONS,LINK_MENU_DISPLAYED
  199.    Screen 2
  200.    Cls 0
  201.    MENU_TITLE_PRINT
  202.    NUM=1
  203.    For LOP=5 To((AMOUNT_OF_OPTIONS)*2)+5 Step 2
  204.       Print At(14,LOP);NUM;At(14,LOP);"[";At(16,LOP);"]  ";OPTION$(NUM-1,0)
  205.       Inc NUM
  206.    Next LOP
  207.    Inverse On 
  208.    Centre At(,21)+"PLEASE CLICK ON THE OPTION YOU WISH TO VIEW."
  209.    Inverse Off 
  210.    LINK_MENU_DISPLAYED=True
  211. End Proc
  212. ' -----------------------------------------------------------------------
  213. Procedure LINK_FILE_PROCESS
  214.    Shared LINK_FILE_PRESENT
  215.    LINK_FILE_PRESENT=True
  216.    MENU_TITLE_PRINT
  217.    DISPLAY_MENU
  218.    Limit Mouse X Hard(1,0),Y Hard(1,0) To X Hard(1,319),Y Hard(2,168)
  219. End Proc
  220. ' -----------------------------------------------------------------------
  221. Procedure FILE_PRINT
  222.    Shared FILE_LENGTH,LINE$(),BUTTON$()
  223.    On Error Goto FATEL_ERROR1 : 
  224.    For LOP=Start(10) To Start(10)+Length(10)
  225.       A=Peek(LOP)
  226.       Lprint Chr$(A);
  227.       If A=10 Then Lprint Chr$(13);
  228.    Next LOP
  229.    Lprint 
  230.    RECOVER_1:
  231.    Pop Proc
  232.    FATEL_ERROR1:
  233.    For LOP=1 To 5
  234.       Bell 
  235.       Wait 2
  236.    Next LOP
  237.    LINE$(0)="There is a Printer problem!"
  238.    BUTTON$(0)="Sorry about that"
  239.    ALERT[32,7,0,1,1,1]
  240.    Resume RECOVER_1
  241. End Proc
  242. ' -----------------------------------------------------------------------
  243. Procedure CHANGE_RES
  244.    Shared PAGE_LENGTH,FILE_PRESENT
  245.    Ink 0
  246.    If PAGE_LENGTH=18
  247.       Text 107,17,"P"
  248.       PAGE_LENGTH=23
  249.    Else 
  250.       Text 107,17,"N"
  251.       PAGE_LENGTH=18
  252.    End If 
  253.    If FILE_PRESENT
  254.       FILE_PROCESS
  255.    End If 
  256. End Proc
  257. ' -----------------------------------------------------------------------
  258. Procedure PAGE_PRINT
  259.    Shared CURRENT_PAGE,PAGESTART(),PAGEEND(),LINE$(),BUTTON$()
  260.    On Error Goto FATEL_ERROR2
  261.    ST=Start(10)
  262.    For LOP=PAGESTART(CURRENT_PAGE) To PAGEEND(CURRENT_PAGE)
  263.       A=Peek(LOP)
  264.       Lprint Chr$(A);
  265.       If A=10 Then Lprint Chr$(13);
  266.    Next LOP
  267.    Lprint 
  268.    RECOVER_2:
  269.    Pop Proc
  270.    FATEL_ERROR2:
  271.    For LOP=1 To 5
  272.       Bell 
  273.       Wait 2
  274.    Next LOP
  275.    LINE$(0)="There is a Printer problem!"
  276.    BUTTON$(0)="Sorry about that"
  277.    ALERT[32,7,0,1,1,1]
  278.    Resume RECOVER_2
  279. End Proc
  280. ' -----------------------------------------------------------------------
  281. Procedure PAGE_UP
  282.    Shared CURRENT_PAGE,PAGESTART(),PAGEEND()
  283.    If CURRENT_PAGE>0
  284.       Dec CURRENT_PAGE
  285.       PAGE_SHOW[CURRENT_PAGE]
  286.    End If 
  287. End Proc
  288. ' -----------------------------------------------------------------------
  289. Procedure PAGE_DOWN
  290.    Shared CURRENT_PAGE,PAGESTART(),PAGEEND(),PAGE_NUM
  291.    If CURRENT_PAGE<PAGE_NUM-1
  292.       Inc CURRENT_PAGE
  293.       PAGE_SHOW[CURRENT_PAGE]
  294.    End If 
  295. End Proc
  296. ' -----------------------------------------------------------------------
  297. Procedure FILE_LOAD
  298.    Shared FILE_PRESENT,FILE_LENGTH,LINK_FILE_PRESENT
  299.    Shared AMOUNT_OF_OPTIONS,MENU_TITLE$,OPTION$(),LINE$(),BUTTON$(),F$
  300.    On Error Goto FATEL_ERROR3
  301.    TEMP=1
  302.  
  303.    F$=Fsel$("df0:","","Pick ascii File To View")
  304.  
  305.    If Exist(F$)
  306.       Open In 1,F$
  307.       Input #1,IDTAG$
  308.       If IDTAG$="AARLFBYPJH"
  309.          TEMP=2
  310.          Input #1,MENU_TITLE$
  311.          Input #1,TEMP$
  312.          AMOUNT_OF_OPTIONS=Val(TEMP$)
  313.          For LOP=0 To AMOUNT_OF_OPTIONS
  314.             Input #1,OPTION$(LOP,0)
  315.             Input #1,OPTION$(LOP,1)
  316.          Next LOP
  317.          Close 
  318.          LINK_FILE_PROCESS
  319.       Else 
  320.          Close 
  321.          FILE_LOADER[F$]
  322.       End If 
  323.    Else 
  324.       For LOP=1 To 5
  325.          Bell 
  326.          Wait 2
  327.       Next LOP
  328.       If F$="AMOS:Help/Acc_Help.Lnk"
  329.          LINE$(0)="    I cannot find     "
  330.          LINE$(1)=" 'AMOS:Help/Acc_Help.Lnk' "
  331.          BUTTON$(0)="Oh no......"
  332.          ALERT[23,8,0,1,1,2]
  333.       Else 
  334.          For LOP=1 To 5
  335.             Bell 
  336.             Wait 2
  337.          Next LOP
  338.          LINE$(0)="That File Does not"
  339.          LINE$(1)="   exist!!!!!!!   !"
  340.          BUTTON$(0)="  Woops......  "
  341.       End If 
  342.    End If 
  343.    RECOVER_3:
  344.    F$=""
  345.    Pop Proc
  346.    FATEL_ERROR3:
  347.    Close 
  348.    If FILE$<>""
  349.       For LOP=1 To 5
  350.          Bell 
  351.          Wait 2
  352.       Next LOP
  353.       If TEMP=1
  354.          LINE$(0)="Woops, disc error!"
  355.          BUTTON$(0)="Never mind."
  356.          ALERT[21,7,0,1,1,1]
  357.       Else 
  358.          If TEMP=2
  359.             LINE$(0)="I seem to be having"
  360.             LINE$(1)="a problem with this"
  361.             LINE$(2)="      Link file.   "
  362.             BUTTON$(0)="Sorry......"
  363.             ALERT[22,8,0,1,1,3]
  364.          Else 
  365.             If TEMP=3
  366.                LINE$(0)="    I cannot find     "
  367.                LINE$(1)=" 'AMOS:Help/Acc_Help.Lnk' "
  368.                BUTTON$(0)="Oh no......"
  369.                ALERT[23,8,0,1,1,2]
  370.             End If 
  371.          End If 
  372.       End If 
  373.    End If 
  374.    Resume RECOVER_3
  375. End Proc
  376. ' -----------------------------------------------------------------------
  377. Procedure LINK_LOADER
  378.    Shared POSITION2,AMOUNT_OF_OPTIONS,MENU_TITLE$,OPTION$(),LINK_SELECTED,F$
  379.    FILE_LOADER[OPTION$(POSITION2-1,1)]
  380.    If Param=1 Then LINK_SELECTED=0
  381. End Proc
  382. ' -----------------------------------------------------------------------
  383. Procedure FILE_LOADER[F$]
  384.    Shared FILE_LENGTH,FILE_PRESENT,LINE$(),BUTTON$()
  385.    TEMP=0
  386.    On Error Goto FATEL_ERROR4
  387.    Open In 1,F$
  388.    FILE_LENGTH=Lof(1)
  389.    Close 
  390.    Erase 10
  391.    If Chip Free+Fast Free>FILE_LENGTH+1024
  392.       Reserve As Work 10,FILE_LENGTH
  393.       Bload F$,Start(10)
  394.       FILE_PROCESS
  395.       FILE_PRESENT=True
  396.    Else 
  397.       LINE$(0)=" Sorry, you do not have enough"
  398.       LINE$(1)="  memory to load this file.  "
  399.       BUTTON$(0)=" Never mind.... "
  400.       ALERT[32,8,0,1,1,2]
  401.    End If 
  402.    RECOVER_4:
  403.    Close 
  404.    Pop Proc
  405.    FATEL_ERROR4:
  406.    TEMP=1
  407.    LINE$(0)="Woops, disc error!"
  408.    BUTTON$(0)="Never mind."
  409.    ALERT[21,7,0,1,1,1]
  410.    Resume RECOVER_4
  411. End Proc[TEMP]
  412. ' -----------------------------------------------------------------------
  413. Procedure SET_UP_SCREENS
  414.    Unpack 5 To 1
  415.    ' ----- Show 'P' in TV icon to indicate PAL mode ----- 
  416.    Ink 0
  417.    Text 107,17,"P"
  418.    Restore POSITION_OF_ZONES
  419.    Reserve Zone 7
  420.    For LOP=1 To 7
  421.       Read X1,X2
  422.       Set Zone LOP,X1,4 To X2,27
  423.    Next LOP
  424.    OPEN_HIRES
  425.    Limit Mouse X Hard(1,0),Y Hard(1,0) To X Hard(1,320),Y Hard(2,200)
  426.    Reserve Zone 15
  427.    NUM=1
  428.    For LOP=5 To 19 Step 2
  429.       Print At(0,LOP);Zone$(Space$(79),NUM)
  430.       Inc NUM
  431.    Next LOP
  432.    Screen 1
  433.    POSITION_OF_ZONES:
  434.    Data 8,89,96,125,132,159,166,194,201,229,236,264,271,312
  435. End Proc
  436. ' -----------------------------------------------------------------------
  437. Procedure OPEN_HIRES
  438.    Shared PAGE_LENGTH
  439.    If PAGE_LENGTH=19
  440.       SCRLENGTH=168
  441.    Else 
  442.       SCRLENGTH=210
  443.    End If 
  444.    Screen Open 2,640,SCRLENGTH,2,Hires
  445.    Screen Display 2,,83,640,SCRLENGTH
  446.    Colour 1,$CCC
  447.    Curs Off : Flash Off : Cls 0
  448. End Proc
  449. ' -----------------------------------------------------------------------
  450. Procedure CONVERT
  451.    Shared FILE_LENGTH
  452.    ST=Start(10)
  453.    EN=Start(10)+FILE_LENGTH
  454.    Repeat 
  455.       X=Hunt(ST To EN,Chr$(13))
  456.       If X<>0
  457.          Poke X,32
  458.          ST=X
  459.       End If 
  460.    Until ST=EN or X=0
  461. End Proc
  462. ' -----------------------------------------------------------------------
  463. Procedure FILE_PROCESS
  464.    Shared PAGESTART(),PAGEEND(),FILE_LENGTH,PAGE_NUM,PAGE_LENGTH
  465.    Shared LINK_MENU_DISPLAYED,CURRENT_PAGE
  466.    PAGE_NUM=0
  467.    LINES=-1
  468.    TEMP=0
  469.    COUNT=0
  470.    Screen 2
  471.    Cls 0
  472.    Centre At(,9)+"Please Wait, Processing Document..........."
  473.    Bell 
  474.    CONVERT
  475.    Centre At(,9)+"Please Wait, Paginating Document..........."
  476.    Bell 
  477.    ST=Start(10)
  478.    EN=Start(10)+FILE_LENGTH
  479.    COUNT=ST
  480.    Wait 10
  481.    Repeat 
  482.       If PAGE_NUM=0
  483.          PAGESTART(PAGE_NUM)=ST
  484.       Else 
  485.          PAGESTART(PAGE_NUM)=COUNT+1
  486.       End If 
  487.       LINES=0
  488.       Repeat 
  489.          Inc LINES
  490.          Inc COUNT
  491.          TEMP=False
  492.          Repeat 
  493.             A=Hunt(COUNT To EN,Chr$(10))
  494.             If(A-COUNT>79) or A=0
  495.                Add COUNT,79
  496.                TEMP=True
  497.             Else 
  498.                COUNT=A
  499.             End If 
  500.          Until COUNT=>EN or A<>0 or TEMP=True
  501.       Until LINES=PAGE_LENGTH or COUNT=>EN
  502.       PAGEEND(PAGE_NUM)=COUNT
  503.       Inc PAGE_NUM
  504.    Until COUNT=>EN
  505.    PAGEEND(PAGE_NUM-1)=EN
  506.    Cls 0
  507.    PAGE_SHOW[0]
  508.    CURRENT_PAGE=0
  509.    Screen 1
  510.    LINK_MENU_DISPLAYED=False
  511. End Proc
  512. ' -----------------------------------------------------------------------
  513. Procedure PAGE_SHOW[NUM]
  514.    Shared PAGESTART(),PAGEEND(),FILE_LENGTH,PAGE_NUM,PAGE_LENGTH
  515.    Screen 2
  516.    Cls 0
  517.    Inverse On 
  518.    Centre At(,PAGE_LENGTH+1)+"~~~~~~~~ PAGE:"+Str$(NUM+1)+" ~~~~~~~~"
  519.    Inverse Off 
  520.    Home 
  521.    ST=Start(10)
  522.    For LOP=PAGESTART(NUM) To PAGEEND(NUM)
  523.       A=Peek(LOP)
  524.       Print Chr$(A);
  525.       If A=10 Then Print Chr$(13);
  526.    Next LOP
  527.    Screen 1
  528. End Proc